【アップデート】Systems Managerがインフラテストツール「InSpec」に対応しました!
森永です。
Systems Manager(SSM)使ってますか。いいですよねSSM。
今回SSMにアップデートがあり、インフラストラクチャのテストツール「InSpec」に対応しました!!
AWS Systems Manager Adds Support for InSpec by Chef
InSpecとは
「InSpec」とはサーバ設定の自動化ツールを提供しているChef社がOSSで公開しているインフラストラクチャのテストツールです。
InSpec - Audit and Automated Testing Framework
chef/inspec: InSpec: Auditing and Testing Framework
インフラストラクチャのテストツールというとServerspecを想像される方も多いかと思いますが、InSpecはServerspecにインスパイヤされて作成されたもののようです。
InSpec is inspired by the wonderful Serverspec project. Kudos to mizzy and all contributors!
Serverspec同様、RubyのDSLでテストを記述して、文法もかなりにているためServerspecを使っていた人であればすぐにテストを書けると思います。
今回始めて触るよ、という方もサンプルのテストコードがGitHub上で公開されていますので、まずはこちらで試してみるのが良さそうです。
また、よく使う内容はPredefined profileとしてGitHubにまとめられていますので、こちらを自分用に修正して利用するのもよいかと思います。
詳しいInSpecの使用方法はのちほどまとめたいと思います。
Systems Managerでのサポート
「AWS-RunInSpecChecks」というSSMドキュメントが追加されて、SSMエージェントが入っているEC2インスタンスであれば簡単にInSpecでのテストが出来るようになりました。
試してみる
適当にテスト対象となるEC2インスタンスを立ち上げます。
SSMエージェントを導入し、SSMを実行できるロールを付与することを忘れずやりましょう。
次に「RunCommand」からコマンドを実行します。
「AWS-RunInSpecChecks」というドキュメントが増えていますね。
先ほど起動したインスタンスを選択し、InSpecのテストコードの場所を指定します。
S3とGitHub上から選べますが、今回はGitHubにあるサンプルを使用してみます。
サンプルの内容は、ssh/rdpのListen Addressが0.0.0.0でListenしていないかというものです。
「Source Info」の箇所には以下のようなjsonを記述します。
{"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}
項目 | 内容 | 補足 |
---|---|---|
owner | GitHubリポジトリのオーナー名 | |
repository | リポジトリ名 | |
path | inspec.yml のあるディレクトリへのパス |
|
getOptions | その他オプション | branch を指定することも出来ます |
InSpecのディレクトリ構造は以下を参照してください。
About InSpec Profiles
設定はこれだけです。実行してみます。
出力が3つでてますね!
runInSpecLinuxの出力を確認してみます。
Installing Chef Development Kit Executing InSpec tests Completed InSpec checks and put 1 compliant (1 critical, 0 high, 0 low) and 1 non-compliant (1 critical, 0 high, 0 low) items Uninstalling Chef Development Kit ----------ERROR------- [DEPRECATED] The option --format is being is being deprecated and will be removed in inspec 3.0. Please use --reporter
一つクリティカルな問題があるとでています。
ログを見るに、Chef Development Kitをインストールして、テストを行ってから、アンインストールを行ってくれていますね。便利。
今回はAmazon Linuxに対して実行したため、Windowsのものはスキップされています。
Step execution skipped due to incompatible platform. Step name: runInSpecWindows
結果は「Configuration Compliance」からも確認できます。
sshd_config
を変更して、Listen AddressをEC2のローカルIPのみにしぼります。(これをやるべきかは今回は置いておきます。)
$ curl http://169.254.169.254/latest/meta-data/local-ipv4 10.0.0.50 $ sudo vi /etc/ssh/sshd_config ... #ListenAddress 0.0.0.0 #ListenAddress :: ListenAddress 10.0.0.50 ... $ sudo service sshd reload
再度、実行してみると。。。
COMPLIANTになってますね!!
最後に
サーバへのInspecのインストール、テスト、アンインストールまで勝手にやってくれるので非常に便利ですね!
テスト用のコードも多数公開されていますので、是非試してみてください!
楽してセキュアな環境を作りましょう!!